回顧過去幾天,我們已經學會了如何讓 AI 獨立完成任務(Function Calling)或與其他 AI 進行協作(Agents)。這就像是我們的廚師能夠獨立完成一道菜,或者和其他廚師一起工作。
但對於真正的企業級商業流程,我們需要的是一套標準化、可重複、且能夠處理複雜分支邏輯的「中央廚房生產線」。單純的聊天或單次工具呼叫已經不夠了!
今天,我們要來探索 Semantic Kernel (SK) 裡一個極具野心且仍處於實驗階段 (Experimental) 的框架:Process Framework。它正是為了解決那些跨越多個步驟、需要精確順序控制的複雜商業流程而設計。
你可以將 Process Framework 想像成一套流程圖繪製工具,它允許你將多個 SK 的功能、Plugins、甚至是其他 Agents,像積木一樣精確地串連起來,形成一個嚴謹的、可追蹤的自動化流程。
在 Process Framework 中,核心概念如下:
透過這三個概念,我們就能把原本需要數十行 if/else
或手動的 await
程式碼,轉換為清晰、高可讀性的流程定義。
我們以一個常見的企業流程——自動化文件生成流程——作為範例:
由於 Process Framework 處於實驗階段且 API 變動較大,這裡我們將以概念性的 C# 程式碼來展示如何定義這個流程結構,強調其邏輯而非具體實現細節。
我們將使用 Microsoft.SemanticKernel.Experimental.Process
命名空間下的概念。
using Microsoft.SemanticKernel;
using Microsoft.Extensions.Configuration;
using Microsoft.SemanticKernel.Connectors.OpenAI;
using Microsoft.SemanticKernel.Process;
using Day29.Plugins;
using Day29.Workflows;
using Day29.ProcessFramework;
using Day29.ProcessSteps;
// Day 29: Semantic Kernel Process Framework 實作
// 本範例展示如何使用 Semantic Kernel Process Framework 建立複雜的工作流程
// 包含:資料收集 → 草稿生成 → 審核循環 → 文件發布
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true)
.AddUserSecrets<Program>()
.Build();
// 建立 Kernel
var kernel = CreateKernel(configuration);
Console.WriteLine("🚀 Semantic Kernel Process Framework 示範");
Console.WriteLine(new string('=', 60));
// 示範 1: 基本 Process Framework 使用
await RunProcessFrameworkDemoAsync(kernel);
// 示範 2: 傳統工作流程比較
await RunTraditionalWorkflowDemoAsync(kernel);
// 示範 3: 並行處理多個流程
await RunMultipleProcessesAsync(kernel);
Console.WriteLine("\n🎉 所有示範完成!");
Console.WriteLine("按任意鍵結束程式...");
Console.ReadKey();
/// <summary>
/// 建立並設定 Semantic Kernel
/// </summary>
static Kernel CreateKernel(IConfiguration configuration)
{
var builder = Kernel.CreateBuilder();
// 設定 OpenAI
var openAiApiKey = configuration["OpenAI:ApiKey"];
if (!string.IsNullOrEmpty(openAiApiKey))
{
builder.AddOpenAIChatCompletion("gpt-4o", openAiApiKey);
Console.WriteLine("✅ 使用 OpenAI 服務");
}
else
{
Console.WriteLine("⚠️ 未設定 API 金鑰,將使用模擬模式");
}
return builder.Build();
}
/// <summary>
/// 示範 Process Framework 的使用
/// </summary>
static async Task RunProcessFrameworkDemoAsync(Kernel kernel)
{
Console.WriteLine("📋 示範 1: Process Framework 完整工作流程");
Console.WriteLine(new string('-', 50));
try
{
// 執行 Process Framework 流程
var topic = "Semantic Kernel Process Framework";
Console.WriteLine($"🚀 開始執行 Process Framework 流程: {topic}");
var result = await DocumentProcessBuilder.ExecuteDocumentGenerationProcessAsync(kernel, topic);
Console.WriteLine($"✅ Process Framework 流程完成!");
Console.WriteLine($"📊 結果: {result}");
}
catch (Exception ex)
{
Console.WriteLine($"❌ Process Framework 執行失敗: {ex.Message}");
}
Console.WriteLine();
}
/// <summary>
/// 示範傳統工作流程方法
/// </summary>
static async Task RunTraditionalWorkflowDemoAsync(Kernel kernel)
{
Console.WriteLine("📋 示範 2: 傳統工作流程方法");
Console.WriteLine(new string('-', 50));
try
{
// 註冊傳統 Plugins
RegisterWorkflowPlugins(kernel);
// 執行傳統工作流程
var workflow = new DocumentGenerationWorkflow(kernel);
var result = await workflow.ExecuteAsync("傳統工作流程範例");
Console.WriteLine($"✅ 傳統工作流程完成!");
Console.WriteLine($"📊 結果: {result}");
}
catch (Exception ex)
{
Console.WriteLine($"❌ 傳統工作流程執行失敗: {ex.Message}");
}
Console.WriteLine();
}
/// <summary>
/// 示範並行處理多個流程
/// </summary>
static async Task RunMultipleProcessesAsync(Kernel kernel)
{
Console.WriteLine("📋 示範 3: 並行處理多個 Process Framework 流程");
Console.WriteLine(new string('-', 50));
var topics = new[]
{
"AI Agent 設計模式",
"Prompt Engineering 最佳實務",
"記憶體管理策略"
};
var tasks = topics.Select(async topic =>
{
try
{
var startTime = DateTime.Now;
// 為每個任務建立獨立的 Kernel 實例以避免衝突
var taskKernel = kernel.Clone();
var result = await DocumentProcessBuilder.ExecuteSimpleSequentialProcessAsync(taskKernel, topic);
var duration = DateTime.Now - startTime;
return $"✅ {topic}: 成功 (耗時: {duration.TotalSeconds:F1}秒)";
}
catch (Exception ex)
{
return $"❌ {topic}: 失敗 - {ex.Message}";
}
}).ToArray();
var results = await Task.WhenAll(tasks);
Console.WriteLine("🎯 並行處理結果:");
foreach (var result in results)
{
Console.WriteLine($" 📄 {result}");
}
Console.WriteLine();
}
/// <summary>
/// 註冊工作流程相關的 Plugins (用於傳統工作流程比較)
/// </summary>
static void RegisterWorkflowPlugins(Kernel kernel)
{
// 註冊各個功能 Plugin
kernel.ImportPluginFromType<RAGPlugin>("RAGPlugin");
kernel.ImportPluginFromType<LLMPlugin>("LLMPlugin");
kernel.ImportPluginFromType<ReviewPlugin>("ReviewPlugin");
kernel.ImportPluginFromType<LogicAppPlugin>("LogicAppPlugin");
Console.WriteLine("✅ 已註冊所有傳統工作流程 Plugins");
}
在這個範例中,Process Framework 的價值在於:它讓我們的商業邏輯(步驟的順序、循環、分支)從應用程式的執行程式碼中被分離出來,變成一個清晰的流程定義。
這不僅提高了程式碼的可維護性,更重要的是,它讓我們的 AI Agent 不只是單純的「工具使用者」,而是能夠理解並執行複雜商業流程的「超級經理人」。這才是真正將 AI 導入企業核心業務的關鍵。